# os
import os

# os.path
# 绝对路径
print(os.path.abspath('bar'))  # D:\SourceCode\original_tools\built_in\bar
# 基本名称
print(os.path.basename('foo.txt'))  # foo.txt

# 最长公共子路径
print(
    os.path.commonpath([os.path.abspath('bar'), os.path.abspath('foo.txt')]))  # D:\SourceCode\original_tools\built_in

# 所有路径的最长公共前缀（逐字符比较）
print(os.path.commonprefix(['/usr/lib', '/usr/local/lib']))  # /usr/l

# 路径 path 的目录名称
print(os.path.dirname('/usr/local/src/txt.txt'))  # /usr/local/src

# 路径是否存在
print(os.path.exists('/usr/local/tst.txt'))  # False
print(os.path.lexists('/usr/local/tst.txt'))  # False

bar = os.path.abspath('yasuo/tst/bar')
# 文件时间 - 最后访问
print(os.path.getatime(bar))  # 1628492267.7275681
# 文件时间 - 创建时间
print(os.path.getctime(bar))  # 1628492097.9997919
# 文件时间 - 最后修改
print(os.path.getmtime(bar))  # 1628492097.9997919

# 文件大小
print(os.path.getsize(bar))  # 9

# 是否为绝对路径
print(os.path.isabs(bar), os.path.isabs('bar'))  # True False

# 是否为文件
print(os.path.isfile(bar))  # True
# 是否为目录
print(os.path.isdir(bar))  # False
# 是否为链接
print(os.path.islink(bar))  # False
# 是否为挂载点
print(os.path.ismount(bar))  # False

# 拼接目录
print(os.path.join('D:\SourceCode\original_tools', 'foo.txt'))  # D:\SourceCode\original_tools\foo.txt

# 规范化
print(os.path.normcase(bar))  # d:\sourcecode\original_tools\built_in\bar
print(os.path.normpath(bar))  # D:\SourceCode\original_tools\built_in\bar
print(os.path.realpath(bar))  # D:\SourceCode\original_tools\built_in\bar

# 计算相对路径
print(os.path.relpath(bar, 'SourceCode'))  # ..\bar

# 是否为同一路径
print(os.path.samefile(bar, 'yasuo/tst/bar'))  # True

# 返回一个文件的目录名和文件名
print(os.path.split(bar))  # ('D:\\SourceCode\\original_tools\\built_in', 'bar')
print(os.path.splitdrive(bar))  # ('D:', '\\SourceCode\\original_tools\\built_in\\bar')
print(os.path.splitext(bar))  # ('D:\\SourceCode\\original_tools\\built_in\\bar', '')
print(os.path.supports_unicode_filenames)  # True

#
print(os.name)  # nt
# print(os.ctermid()) # unix可用

print(os.environ)

# 文件与目录

if os.access('bar', os.R_OK):
    print('可写')
else:
    print('不可写')

print(os.R_OK, os.F_OK, os.W_OK, os.X_OK)  # 4 0 2 1

# os.chdir("D:/")
#
# os.chown('bar', 1001, -1)
# 创建硬链接
# os.link('bar', 'bar-link')
# 迭代文件夹下的文件
print(os.listdir(
    'D:\SourceCode\original_tools'))  # ['.idea', '80s_spider.py', 'boss.xls', 'built_in', 'course.xlsx', 'create_catelog.py', 'create_time_excel.py', 'example.ini', 'funcs.py', 'gen_boss_table.py', 'gen_pass', 'ghostdriver.log', 'ini', 'md_to_pdf', 'mqtt_pub_tst.py', 'mqtt_sub_tst.py', 'panbaidu_file.py', 'panbaidu_upload.py', 'pyqt-test', 'qiushibaike.py', 'rename.py', 'requirements - 副本.txt', 'requirements.txt', 'shengke-config.py', 'show-run-16-1.1.1.1.txt', 'test.csv', 'trie.py', 'try.py', 'try.ui', 'tst.log', 'tst.py', 'venv', 'xunbo_spider.py', '《顶楼第三季》.txt']

# 获取文件描述符的状态
print(os.stat(
    'yasuo/tst/bar'))  # os.stat_result(st_mode=33206, st_ino=105271641289873925, st_dev=816388409, st_nlink=2, st_uid=0, st_gid=0, st_size=9, st_atime=1628500864, st_mtime=1628492097, st_ctime=1628492097)
print(os.lstat(
    'yasuo/tst/bar'))  # os.stat_result(st_mode=33206, st_ino=105271641289873925, st_dev=816388409, st_nlink=2, st_uid=0, st_gid=0, st_size=9, st_atime=1628500864, st_mtime=1628492097, st_ctime=1628492097)
# 创建文件夹
# print(os.mkdir('tst'), os.makedirs('tst1/tst1/tst1'))
print(os.scandir('.'))  # <nt.ScandirIterator object at 0x000002AB5D581790>
for i in os.scandir('.'):
    print(i)

print(os.putenv('name', 'name-m176'))
print(os.getenv('name'))  # None
print(os.getlogin())  # m1761
